function rob(nums) {
    const n = nums.length
    if (n === 0) return 0
    if (n === 1) return nums[0]

    let prev1 = 0
    let prev2 = 0

    for (let i = 0; i < n; i++) {
       const current = Math.max(prev1, prev2 + nums[i])
       prev2 = prev1
       prev1 = current
    }

    return prev1
 }

 // 示例测试
 console.log(rob([1, 2, 3, 1])) // 输出：4
 console.log(rob([2, 7, 9, 3, 1])) // 输出：12

// 优化后的算法分析：
// 时间复杂度：O(n)，因为需要遍历一次数组。
// 空间复杂度：O(1)，因为只需要常量空间来存储前两个状态的值。
// 通过上述方法，我们可以有效地计算出不触动警报装置的情况下，可以偷窃到的最高金额。优化后的代码在空间复杂度上更高效。